/* 
 * 创建日期 2011-3-30
 *
 * 成都天和软件公司
 * 电话：028-85425861 
 * 传真：028-85425861-8008 
 * 邮编：610041 
 * 地址：成都市武侯区航空路6号丰德万瑞中心B座1001 
 * 版权所有
 */
package  org.fantasy.cpp.core.util;

import java.util.Map;

import  org.fantasy.cpp.core.pojo.QueryConfig;
import  org.fantasy.cpp.core.pojo.QueryType;
import  org.fantasy.common.compile.CompileCenter;
import  org.fantasy.common.compile.SqlConvertor;

/**
 * 查询编译
 * 
 * @author 王文成
 * @version 1.0
 * @since 2011-3-30
 */
public class QueryCompiler {
	
	/**
	 * 查询配置
	 */
	private QueryConfig config;
	
	/**
	 * 查询MAP
	 */
	private Map<String, Object> qryMap;

	public QueryCompiler(QueryConfig config, Map<String, Object> qryMap) {
		this.config = config;
		this.qryMap = qryMap;
	}
	
	/**
	 * 编译
	 * @return
	 * @throws Exception
	 */
	public String compile(CompileCenter compileCenter) throws Exception {
		String queryId = config.getQueryId().toString();
		Long type = config.getQueryTypeId();
		String value = config.getQueryConfig();
		if (QueryType.isJavaType(type)) {
			return compileCenter.compileSql(queryId,value, qryMap);
		}else if (QueryType.isXSqlType(type)) {
			// 重新翻译SQL
			SqlConvertor covertor = new SqlConvertor(value);
			return compileCenter.compileSql(queryId,covertor.toJava(), qryMap);
		}else if(QueryType.isSqlType(type)){
			return value;
		}else if(QueryType.isJSONType(type)){
			return value;
		}
		throw new Exception("无法判断查询类型[config=" + config + "]");
	}
}
